package nav

/*
#include<stdint.h>
#include<stdbool.h>
extern void nav_dtObstacleAvoidanceDebugData_addSample(void * c_this,void * vel,float ssize,float pen,float vpen,float vcpen,float spen,float tpen);
extern void nav_dtObstacleAvoidanceDebugData_Delete(void * c_this);
extern void nav_dtObstacleAvoidanceDebugData_DeleteArray(void * c_this);
extern void* nav_NewdtObstacleAvoidanceDebugData();
extern float nav_dtObstacleAvoidanceDebugData_getSampleCollisionTimePenalty(void * c_this,int i);
extern int nav_dtObstacleAvoidanceDebugData_getSampleCount(void * c_this);
extern float nav_dtObstacleAvoidanceDebugData_getSampleCurrentVelocityPenalty(void * c_this,int i);
extern float nav_dtObstacleAvoidanceDebugData_getSampleDesiredVelocityPenalty(void * c_this,int i);
extern float nav_dtObstacleAvoidanceDebugData_getSamplePenalty(void * c_this,int i);
extern float nav_dtObstacleAvoidanceDebugData_getSamplePreferredSidePenalty(void * c_this,int i);
extern float nav_dtObstacleAvoidanceDebugData_getSampleSize(void * c_this,int i);
extern void * nav_dtObstacleAvoidanceDebugData_getSampleVelocity(void * c_this,int i);
extern void * nav_dtObstacleAvoidanceDebugData_IndexArray(void * c_this,long n);
extern bool nav_dtObstacleAvoidanceDebugData_init(void * c_this,int maxSamples);
extern void nav_dtObstacleAvoidanceDebugData_normalizeSamples(void * c_this);
extern void nav_dtObstacleAvoidanceDebugData_reset(void * c_this);
extern void nav_dtObstacleAvoidanceParams_Delete(void * c_this);
extern void nav_dtObstacleAvoidanceParams_DeleteArray(void * c_this);
extern void* nav_NewdtObstacleAvoidanceParams();
extern void * nav_dtObstacleAvoidanceParams_GetPtrToAdaptiveDepth(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToAdaptiveDivs(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToAdaptiveRings(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToGridSize(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToHorizTime(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToVelBias(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToWeightCurVel(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToWeightDesVel(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToWeightSide(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_GetPtrToWeightToi(void * c_this);
extern void * nav_dtObstacleAvoidanceParams_IndexArray(void * c_this,long n);
extern void nav_dtObstacleAvoidanceQuery_addCircle(void * c_this,void * pos,float rad,void * vel,void * dvel);
extern void nav_dtObstacleAvoidanceQuery_addSegment(void * c_this,void * tmp_arg_p,void * q);
extern void nav_dtObstacleAvoidanceQuery_Delete(void * c_this);
extern void nav_dtObstacleAvoidanceQuery_DeleteArray(void * c_this);
extern void* nav_NewdtObstacleAvoidanceQuery();
extern void * nav_dtObstacleAvoidanceQuery_getObstacleCircle(void * c_this,int i);
extern int nav_dtObstacleAvoidanceQuery_getObstacleCircleCount(void * c_this);
extern void * nav_dtObstacleAvoidanceQuery_getObstacleSegment(void * c_this,int i);
extern int nav_dtObstacleAvoidanceQuery_getObstacleSegmentCount(void * c_this);
extern void * nav_dtObstacleAvoidanceQuery_IndexArray(void * c_this,long n);
extern bool nav_dtObstacleAvoidanceQuery_init(void * c_this,int maxCircles,int maxSegments);
extern void nav_dtObstacleAvoidanceQuery_reset(void * c_this);
extern int nav_dtObstacleAvoidanceQuery_sampleVelocityAdaptive(void * c_this,void * pos,float rad,float vmax,void * vel,void * dvel,void * nvel,void * params,void * debug);
extern int nav_dtObstacleAvoidanceQuery_sampleVelocityGrid(void * c_this,void * pos,float rad,float vmax,void * vel,void * dvel,void * nvel,void * params,void * debug);
extern void nav_dtObstacleCircle_Delete(void * c_this);
extern void nav_dtObstacleCircle_DeleteArray(void * c_this);
extern void* nav_NewdtObstacleCircle();
extern void * nav_dtObstacleCircle_GetPtrToDp(void * c_this);
extern void * nav_dtObstacleCircle_GetPtrToDvel(void * c_this);
extern void * nav_dtObstacleCircle_GetPtrToNp(void * c_this);
extern void * nav_dtObstacleCircle_GetPtrToP(void * c_this);
extern void * nav_dtObstacleCircle_GetPtrToRad(void * c_this);
extern void * nav_dtObstacleCircle_GetPtrToVel(void * c_this);
extern void * nav_dtObstacleCircle_IndexArray(void * c_this,long n);
extern void nav_dtObstacleSegment_Delete(void * c_this);
extern void nav_dtObstacleSegment_DeleteArray(void * c_this);
extern void* nav_NewdtObstacleSegment();
extern void * nav_dtObstacleSegment_GetPtrToP(void * c_this);
extern void * nav_dtObstacleSegment_GetPtrToQ(void * c_this);
extern void * nav_dtObstacleSegment_GetPtrToTouch(void * c_this);
extern void * nav_dtObstacleSegment_IndexArray(void * c_this,long n);
extern void * nav_dtAllocObstacleAvoidanceDebugData();
extern void * nav_dtAllocObstacleAvoidanceQuery();
extern void nav_dtFreeObstacleAvoidanceDebugData(void * ptr);
extern void nav_dtFreeObstacleAvoidanceQuery(void * ptr);
extern void * nav_NewDtObstacleAvoidanceDebugDataPtrArray(long n);
extern void * nav_NewDtObstacleAvoidanceParamsPtrArray(long n);
extern void * nav_NewDtObstacleAvoidanceQueryPtrArray(long n);
extern void * nav_NewDtObstacleCirclePtrArray(long n);
extern void * nav_NewDtObstacleSegmentPtrArray(long n);

*/
import "C"
import "unsafe"
import "gitee.com/hasika/cgo"

var _ unsafe.Pointer
var _ cgo.NotUsed

type DtObstacleAvoidanceDebugDataPtr uintptr

/*
public void addSample(float const * vel, float const ssize, float const pen, float const vpen, float const vcpen, float const spen, float const tpen)
*/
func (p DtObstacleAvoidanceDebugDataPtr) AddSample(vel *float32, ssize float32, pen float32, vpen float32, vcpen float32, spen float32, tpen float32) {
	var wrap_this unsafe.Pointer
	var wrap_arg_vel unsafe.Pointer
	var wrap_arg_ssize C.float
	var wrap_arg_pen C.float
	var wrap_arg_vpen C.float
	var wrap_arg_vcpen C.float
	var wrap_arg_spen C.float
	var wrap_arg_tpen C.float
	wrap_this = unsafe.Pointer(p)
	wrap_arg_vel = (unsafe.Pointer)(vel)
	wrap_arg_ssize = (C.float)(ssize)
	wrap_arg_pen = (C.float)(pen)
	wrap_arg_vpen = (C.float)(vpen)
	wrap_arg_vcpen = (C.float)(vcpen)
	wrap_arg_spen = (C.float)(spen)
	wrap_arg_tpen = (C.float)(tpen)
	C.nav_dtObstacleAvoidanceDebugData_addSample(wrap_this, wrap_arg_vel, wrap_arg_ssize, wrap_arg_pen, wrap_arg_vpen, wrap_arg_vcpen, wrap_arg_spen, wrap_arg_tpen)
}

/*
public void Delete()
*/
func (p DtObstacleAvoidanceDebugDataPtr) Delete() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceDebugData_Delete(wrap_this)
}

/*
void DeleteArray()
*/
func (p DtObstacleAvoidanceDebugDataPtr) DeleteArray() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceDebugData_DeleteArray(wrap_this)
}

/*
public dtObstacleAvoidanceDebugData()
*/
func NewDtObstacleAvoidanceDebugData() cgo.GoManagedPtr[DtObstacleAvoidanceDebugDataPtr] {
	wrap_out := C.nav_NewdtObstacleAvoidanceDebugData()
	go_out := cgo.MakePtr[cgo.GoManagedPtr[DtObstacleAvoidanceDebugDataPtr]](uintptr(wrap_out))
	return go_out
}

/*
public float getSampleCollisionTimePenalty(int const i) const
*/
func (p DtObstacleAvoidanceDebugDataPtr) GetSampleCollisionTimePenalty(i int32) float32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_getSampleCollisionTimePenalty(wrap_this, wrap_arg_i)
	go_out := float32(wrap_out)
	return go_out
}

/*
public int getSampleCount() const
*/
func (p DtObstacleAvoidanceDebugDataPtr) GetSampleCount() int32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_getSampleCount(wrap_this)
	go_out := int32(wrap_out)
	return go_out
}

/*
public float getSampleCurrentVelocityPenalty(int const i) const
*/
func (p DtObstacleAvoidanceDebugDataPtr) GetSampleCurrentVelocityPenalty(i int32) float32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_getSampleCurrentVelocityPenalty(wrap_this, wrap_arg_i)
	go_out := float32(wrap_out)
	return go_out
}

/*
public float getSampleDesiredVelocityPenalty(int const i) const
*/
func (p DtObstacleAvoidanceDebugDataPtr) GetSampleDesiredVelocityPenalty(i int32) float32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_getSampleDesiredVelocityPenalty(wrap_this, wrap_arg_i)
	go_out := float32(wrap_out)
	return go_out
}

/*
public float getSamplePenalty(int const i) const
*/
func (p DtObstacleAvoidanceDebugDataPtr) GetSamplePenalty(i int32) float32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_getSamplePenalty(wrap_this, wrap_arg_i)
	go_out := float32(wrap_out)
	return go_out
}

/*
public float getSamplePreferredSidePenalty(int const i) const
*/
func (p DtObstacleAvoidanceDebugDataPtr) GetSamplePreferredSidePenalty(i int32) float32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_getSamplePreferredSidePenalty(wrap_this, wrap_arg_i)
	go_out := float32(wrap_out)
	return go_out
}

/*
public float getSampleSize(int const i) const
*/
func (p DtObstacleAvoidanceDebugDataPtr) GetSampleSize(i int32) float32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_getSampleSize(wrap_this, wrap_arg_i)
	go_out := float32(wrap_out)
	return go_out
}

/*
public float const * getSampleVelocity(int const i) const
*/
func (p DtObstacleAvoidanceDebugDataPtr) GetSampleVelocity(i int32) *float32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_getSampleVelocity(wrap_this, wrap_arg_i)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
dtObstacleAvoidanceDebugData * IndexArray(long n)
*/
func (p DtObstacleAvoidanceDebugDataPtr) IndexArray(n int) uintptr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_IndexArray(wrap_this, C.long(n))
	go_out := uintptr(wrap_out)
	return go_out
}

/*
public bool init(int const maxSamples)
*/
func (p DtObstacleAvoidanceDebugDataPtr) Init(maxSamples int32) bool {
	var wrap_this unsafe.Pointer
	var wrap_arg_maxSamples C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_maxSamples = (C.int)(maxSamples)
	wrap_out := C.nav_dtObstacleAvoidanceDebugData_init(wrap_this, wrap_arg_maxSamples)
	go_out := bool(wrap_out)
	return go_out
}

/*
public void normalizeSamples()
*/
func (p DtObstacleAvoidanceDebugDataPtr) NormalizeSamples() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceDebugData_normalizeSamples(wrap_this)
}

/*
public void reset()
*/
func (p DtObstacleAvoidanceDebugDataPtr) Reset() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceDebugData_reset(wrap_this)
}

type DtObstacleAvoidanceParamsPtr uintptr

/*
public void Delete()
*/
func (p DtObstacleAvoidanceParamsPtr) Delete() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceParams_Delete(wrap_this)
}

/*
void DeleteArray()
*/
func (p DtObstacleAvoidanceParamsPtr) DeleteArray() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceParams_DeleteArray(wrap_this)
}

/*
public dtObstacleAvoidanceParams()
*/
func NewDtObstacleAvoidanceParams() cgo.GoManagedPtr[DtObstacleAvoidanceParamsPtr] {
	wrap_out := C.nav_NewdtObstacleAvoidanceParams()
	go_out := cgo.MakePtr[cgo.GoManagedPtr[DtObstacleAvoidanceParamsPtr]](uintptr(wrap_out))
	return go_out
}

/*
adaptive

public unsigned char * GetPtrToAdaptiveDepth()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToAdaptiveDepth() *uint8 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToAdaptiveDepth(wrap_this)
	go_out := (*uint8)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
adaptive

public unsigned char * GetPtrToAdaptiveDivs()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToAdaptiveDivs() *uint8 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToAdaptiveDivs(wrap_this)
	go_out := (*uint8)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
adaptive

public unsigned char * GetPtrToAdaptiveRings()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToAdaptiveRings() *uint8 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToAdaptiveRings(wrap_this)
	go_out := (*uint8)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
grid

public unsigned char * GetPtrToGridSize()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToGridSize() *uint8 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToGridSize(wrap_this)
	go_out := (*uint8)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToHorizTime()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToHorizTime() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToHorizTime(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToVelBias()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToVelBias() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToVelBias(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToWeightCurVel()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToWeightCurVel() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToWeightCurVel(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToWeightDesVel()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToWeightDesVel() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToWeightDesVel(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToWeightSide()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToWeightSide() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToWeightSide(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToWeightToi()
*/
func (p DtObstacleAvoidanceParamsPtr) GetPtrToWeightToi() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_GetPtrToWeightToi(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
dtObstacleAvoidanceParams * IndexArray(long n)
*/
func (p DtObstacleAvoidanceParamsPtr) IndexArray(n int) uintptr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceParams_IndexArray(wrap_this, C.long(n))
	go_out := uintptr(wrap_out)
	return go_out
}

type DtObstacleAvoidanceQueryPtr uintptr

/*
public void addCircle(float const * pos, float const rad, float const * vel, float const * dvel)
*/
func (p DtObstacleAvoidanceQueryPtr) AddCircle(pos *float32, rad float32, vel *float32, dvel *float32) {
	var wrap_this unsafe.Pointer
	var wrap_arg_pos unsafe.Pointer
	var wrap_arg_rad C.float
	var wrap_arg_vel unsafe.Pointer
	var wrap_arg_dvel unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_arg_pos = (unsafe.Pointer)(pos)
	wrap_arg_rad = (C.float)(rad)
	wrap_arg_vel = (unsafe.Pointer)(vel)
	wrap_arg_dvel = (unsafe.Pointer)(dvel)
	C.nav_dtObstacleAvoidanceQuery_addCircle(wrap_this, wrap_arg_pos, wrap_arg_rad, wrap_arg_vel, wrap_arg_dvel)
}

/*
public void addSegment(float const * tmp_arg_p, float const * q)
*/
func (p DtObstacleAvoidanceQueryPtr) AddSegment(tmp_arg_p *float32, q *float32) {
	var wrap_this unsafe.Pointer
	var wrap_arg_tmp_arg_p unsafe.Pointer
	var wrap_arg_q unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_arg_tmp_arg_p = (unsafe.Pointer)(tmp_arg_p)
	wrap_arg_q = (unsafe.Pointer)(q)
	C.nav_dtObstacleAvoidanceQuery_addSegment(wrap_this, wrap_arg_tmp_arg_p, wrap_arg_q)
}

/*
public void Delete()
*/
func (p DtObstacleAvoidanceQueryPtr) Delete() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceQuery_Delete(wrap_this)
}

/*
void DeleteArray()
*/
func (p DtObstacleAvoidanceQueryPtr) DeleteArray() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceQuery_DeleteArray(wrap_this)
}

/*
public dtObstacleAvoidanceQuery()
*/
func NewDtObstacleAvoidanceQuery() cgo.GoManagedPtr[DtObstacleAvoidanceQueryPtr] {
	wrap_out := C.nav_NewdtObstacleAvoidanceQuery()
	go_out := cgo.MakePtr[cgo.GoManagedPtr[DtObstacleAvoidanceQueryPtr]](uintptr(wrap_out))
	return go_out
}

/*
public dtObstacleCircle const * getObstacleCircle(int const i)
*/
func (p DtObstacleAvoidanceQueryPtr) GetObstacleCircle(i int32) DtObstacleCirclePtr {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceQuery_getObstacleCircle(wrap_this, wrap_arg_i)
	go_out := cgo.MakePtr[DtObstacleCirclePtr](uintptr(wrap_out))
	return go_out
}

/*
public int getObstacleCircleCount() const
*/
func (p DtObstacleAvoidanceQueryPtr) GetObstacleCircleCount() int32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceQuery_getObstacleCircleCount(wrap_this)
	go_out := int32(wrap_out)
	return go_out
}

/*
public dtObstacleSegment const * getObstacleSegment(int const i)
*/
func (p DtObstacleAvoidanceQueryPtr) GetObstacleSegment(i int32) DtObstacleSegmentPtr {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	wrap_out := C.nav_dtObstacleAvoidanceQuery_getObstacleSegment(wrap_this, wrap_arg_i)
	go_out := cgo.MakePtr[DtObstacleSegmentPtr](uintptr(wrap_out))
	return go_out
}

/*
public int getObstacleSegmentCount() const
*/
func (p DtObstacleAvoidanceQueryPtr) GetObstacleSegmentCount() int32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceQuery_getObstacleSegmentCount(wrap_this)
	go_out := int32(wrap_out)
	return go_out
}

/*
dtObstacleAvoidanceQuery * IndexArray(long n)
*/
func (p DtObstacleAvoidanceQueryPtr) IndexArray(n int) uintptr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleAvoidanceQuery_IndexArray(wrap_this, C.long(n))
	go_out := uintptr(wrap_out)
	return go_out
}

/*
public bool init(int const maxCircles, int const maxSegments)
*/
func (p DtObstacleAvoidanceQueryPtr) Init(maxCircles int32, maxSegments int32) bool {
	var wrap_this unsafe.Pointer
	var wrap_arg_maxCircles C.int
	var wrap_arg_maxSegments C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_maxCircles = (C.int)(maxCircles)
	wrap_arg_maxSegments = (C.int)(maxSegments)
	wrap_out := C.nav_dtObstacleAvoidanceQuery_init(wrap_this, wrap_arg_maxCircles, wrap_arg_maxSegments)
	go_out := bool(wrap_out)
	return go_out
}

/*
public void reset()
*/
func (p DtObstacleAvoidanceQueryPtr) Reset() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleAvoidanceQuery_reset(wrap_this)
}

/*
public int sampleVelocityAdaptive(float const * pos, float const rad, float const vmax, float const * vel, float const * dvel, float * nvel, dtObstacleAvoidanceParams const * params, dtObstacleAvoidanceDebugData * debug=0)
*/
func (p DtObstacleAvoidanceQueryPtr) SampleVelocityAdaptive(pos *float32, rad float32, vmax float32, vel *float32, dvel *float32, nvel *float32, params DtObstacleAvoidanceParamsPtr, debug DtObstacleAvoidanceDebugDataPtr) int32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_pos unsafe.Pointer
	var wrap_arg_rad C.float
	var wrap_arg_vmax C.float
	var wrap_arg_vel unsafe.Pointer
	var wrap_arg_dvel unsafe.Pointer
	var wrap_arg_nvel unsafe.Pointer
	var wrap_arg_params unsafe.Pointer
	var wrap_arg_debug unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_arg_pos = (unsafe.Pointer)(pos)
	wrap_arg_rad = (C.float)(rad)
	wrap_arg_vmax = (C.float)(vmax)
	wrap_arg_vel = (unsafe.Pointer)(vel)
	wrap_arg_dvel = (unsafe.Pointer)(dvel)
	wrap_arg_nvel = (unsafe.Pointer)(nvel)
	wrap_arg_params = (unsafe.Pointer)(params)
	wrap_arg_debug = (unsafe.Pointer)(debug)
	wrap_out := C.nav_dtObstacleAvoidanceQuery_sampleVelocityAdaptive(wrap_this, wrap_arg_pos, wrap_arg_rad, wrap_arg_vmax, wrap_arg_vel, wrap_arg_dvel, wrap_arg_nvel, wrap_arg_params, wrap_arg_debug)
	go_out := int32(wrap_out)
	return go_out
}

/*
public int sampleVelocityGrid(float const * pos, float const rad, float const vmax, float const * vel, float const * dvel, float * nvel, dtObstacleAvoidanceParams const * params, dtObstacleAvoidanceDebugData * debug=0)
*/
func (p DtObstacleAvoidanceQueryPtr) SampleVelocityGrid(pos *float32, rad float32, vmax float32, vel *float32, dvel *float32, nvel *float32, params DtObstacleAvoidanceParamsPtr, debug DtObstacleAvoidanceDebugDataPtr) int32 {
	var wrap_this unsafe.Pointer
	var wrap_arg_pos unsafe.Pointer
	var wrap_arg_rad C.float
	var wrap_arg_vmax C.float
	var wrap_arg_vel unsafe.Pointer
	var wrap_arg_dvel unsafe.Pointer
	var wrap_arg_nvel unsafe.Pointer
	var wrap_arg_params unsafe.Pointer
	var wrap_arg_debug unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_arg_pos = (unsafe.Pointer)(pos)
	wrap_arg_rad = (C.float)(rad)
	wrap_arg_vmax = (C.float)(vmax)
	wrap_arg_vel = (unsafe.Pointer)(vel)
	wrap_arg_dvel = (unsafe.Pointer)(dvel)
	wrap_arg_nvel = (unsafe.Pointer)(nvel)
	wrap_arg_params = (unsafe.Pointer)(params)
	wrap_arg_debug = (unsafe.Pointer)(debug)
	wrap_out := C.nav_dtObstacleAvoidanceQuery_sampleVelocityGrid(wrap_this, wrap_arg_pos, wrap_arg_rad, wrap_arg_vmax, wrap_arg_vel, wrap_arg_dvel, wrap_arg_nvel, wrap_arg_params, wrap_arg_debug)
	go_out := int32(wrap_out)
	return go_out
}

type DtObstacleCirclePtr uintptr

/*
public void Delete()
*/
func (p DtObstacleCirclePtr) Delete() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleCircle_Delete(wrap_this)
}

/*
void DeleteArray()
*/
func (p DtObstacleCirclePtr) DeleteArray() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleCircle_DeleteArray(wrap_this)
}

/*
public dtObstacleCircle()
*/
func NewDtObstacleCircle() cgo.GoManagedPtr[DtObstacleCirclePtr] {
	wrap_out := C.nav_NewdtObstacleCircle()
	go_out := cgo.MakePtr[cgo.GoManagedPtr[DtObstacleCirclePtr]](uintptr(wrap_out))
	return go_out
}

/*
Use for side selection during sampling.

public float(*)[3] GetPtrToDp()
*/
func (p DtObstacleCirclePtr) GetPtrToDp() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleCircle_GetPtrToDp(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Velocity of the obstacle

public float(*)[3] GetPtrToDvel()
*/
func (p DtObstacleCirclePtr) GetPtrToDvel() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleCircle_GetPtrToDvel(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Use for side selection during sampling.

public float(*)[3] GetPtrToNp()
*/
func (p DtObstacleCirclePtr) GetPtrToNp() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleCircle_GetPtrToNp(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Position of the obstacle

public float(*)[3] GetPtrToP()
*/
func (p DtObstacleCirclePtr) GetPtrToP() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleCircle_GetPtrToP(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Radius of the obstacle

public float * GetPtrToRad()
*/
func (p DtObstacleCirclePtr) GetPtrToRad() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleCircle_GetPtrToRad(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Velocity of the obstacle

public float(*)[3] GetPtrToVel()
*/
func (p DtObstacleCirclePtr) GetPtrToVel() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleCircle_GetPtrToVel(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
dtObstacleCircle * IndexArray(long n)
*/
func (p DtObstacleCirclePtr) IndexArray(n int) uintptr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleCircle_IndexArray(wrap_this, C.long(n))
	go_out := uintptr(wrap_out)
	return go_out
}

type DtObstacleSegmentPtr uintptr

/*
public void Delete()
*/
func (p DtObstacleSegmentPtr) Delete() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleSegment_Delete(wrap_this)
}

/*
void DeleteArray()
*/
func (p DtObstacleSegmentPtr) DeleteArray() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_dtObstacleSegment_DeleteArray(wrap_this)
}

/*
public dtObstacleSegment()
*/
func NewDtObstacleSegment() cgo.GoManagedPtr[DtObstacleSegmentPtr] {
	wrap_out := C.nav_NewdtObstacleSegment()
	go_out := cgo.MakePtr[cgo.GoManagedPtr[DtObstacleSegmentPtr]](uintptr(wrap_out))
	return go_out
}

/*
End points of the obstacle segment

public float(*)[3] GetPtrToP()
*/
func (p DtObstacleSegmentPtr) GetPtrToP() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleSegment_GetPtrToP(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
End points of the obstacle segment

public float(*)[3] GetPtrToQ()
*/
func (p DtObstacleSegmentPtr) GetPtrToQ() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleSegment_GetPtrToQ(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public bool * GetPtrToTouch()
*/
func (p DtObstacleSegmentPtr) GetPtrToTouch() *bool {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleSegment_GetPtrToTouch(wrap_this)
	go_out := (*bool)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
dtObstacleSegment * IndexArray(long n)
*/
func (p DtObstacleSegmentPtr) IndexArray(n int) uintptr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_dtObstacleSegment_IndexArray(wrap_this, C.long(n))
	go_out := uintptr(wrap_out)
	return go_out
}

/*
dtObstacleAvoidanceDebugData * dtAllocObstacleAvoidanceDebugData()
*/
func DtAllocObstacleAvoidanceDebugData() DtObstacleAvoidanceDebugDataPtr {
	wrap_out := C.nav_dtAllocObstacleAvoidanceDebugData()
	go_out := cgo.MakePtr[DtObstacleAvoidanceDebugDataPtr](uintptr(wrap_out))
	return go_out
}

/*
dtObstacleAvoidanceQuery * dtAllocObstacleAvoidanceQuery()
*/
func DtAllocObstacleAvoidanceQuery() DtObstacleAvoidanceQueryPtr {
	wrap_out := C.nav_dtAllocObstacleAvoidanceQuery()
	go_out := cgo.MakePtr[DtObstacleAvoidanceQueryPtr](uintptr(wrap_out))
	return go_out
}

/*
void dtFreeObstacleAvoidanceDebugData(dtObstacleAvoidanceDebugData * ptr)
*/
func DtFreeObstacleAvoidanceDebugData(ptr DtObstacleAvoidanceDebugDataPtr) {
	var wrap_arg_ptr unsafe.Pointer
	wrap_arg_ptr = (unsafe.Pointer)(ptr)
	C.nav_dtFreeObstacleAvoidanceDebugData(wrap_arg_ptr)
}

/*
void dtFreeObstacleAvoidanceQuery(dtObstacleAvoidanceQuery * ptr)
*/
func DtFreeObstacleAvoidanceQuery(ptr DtObstacleAvoidanceQueryPtr) {
	var wrap_arg_ptr unsafe.Pointer
	wrap_arg_ptr = (unsafe.Pointer)(ptr)
	C.nav_dtFreeObstacleAvoidanceQuery(wrap_arg_ptr)
}

/*
dtObstacleAvoidanceDebugData * NewDtObstacleAvoidanceDebugDataPtrArray(long n)
*/
func NewDtObstacleAvoidanceDebugDataPtrArray(n int) cgo.GoManagedPtr[cgo.Array[DtObstacleAvoidanceDebugDataPtr]] {
	wrap_out := C.nav_NewDtObstacleAvoidanceDebugDataPtrArray(C.long(n))
	go_out := cgo.MakePtr[cgo.GoManagedPtr[cgo.Array[DtObstacleAvoidanceDebugDataPtr]]](uintptr(wrap_out))
	return go_out
}

/*
dtObstacleAvoidanceParams * NewDtObstacleAvoidanceParamsPtrArray(long n)
*/
func NewDtObstacleAvoidanceParamsPtrArray(n int) cgo.GoManagedPtr[cgo.Array[DtObstacleAvoidanceParamsPtr]] {
	wrap_out := C.nav_NewDtObstacleAvoidanceParamsPtrArray(C.long(n))
	go_out := cgo.MakePtr[cgo.GoManagedPtr[cgo.Array[DtObstacleAvoidanceParamsPtr]]](uintptr(wrap_out))
	return go_out
}

/*
dtObstacleAvoidanceQuery * NewDtObstacleAvoidanceQueryPtrArray(long n)
*/
func NewDtObstacleAvoidanceQueryPtrArray(n int) cgo.GoManagedPtr[cgo.Array[DtObstacleAvoidanceQueryPtr]] {
	wrap_out := C.nav_NewDtObstacleAvoidanceQueryPtrArray(C.long(n))
	go_out := cgo.MakePtr[cgo.GoManagedPtr[cgo.Array[DtObstacleAvoidanceQueryPtr]]](uintptr(wrap_out))
	return go_out
}

/*
dtObstacleCircle * NewDtObstacleCirclePtrArray(long n)
*/
func NewDtObstacleCirclePtrArray(n int) cgo.GoManagedPtr[cgo.Array[DtObstacleCirclePtr]] {
	wrap_out := C.nav_NewDtObstacleCirclePtrArray(C.long(n))
	go_out := cgo.MakePtr[cgo.GoManagedPtr[cgo.Array[DtObstacleCirclePtr]]](uintptr(wrap_out))
	return go_out
}

/*
dtObstacleSegment * NewDtObstacleSegmentPtrArray(long n)
*/
func NewDtObstacleSegmentPtrArray(n int) cgo.GoManagedPtr[cgo.Array[DtObstacleSegmentPtr]] {
	wrap_out := C.nav_NewDtObstacleSegmentPtrArray(C.long(n))
	go_out := cgo.MakePtr[cgo.GoManagedPtr[cgo.Array[DtObstacleSegmentPtr]]](uintptr(wrap_out))
	return go_out
}
